﻿namespace UnityEngine
{
    using System;
    using System.Runtime.CompilerServices;
    using System.Runtime.InteropServices;

    public sealed class CharacterJoint : Joint
    {
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_get_highTwistLimit(out SoftJointLimit value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_get_lowTwistLimit(out SoftJointLimit value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_get_rotationDrive(out JointDrive value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_get_swing1Limit(out SoftJointLimit value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_get_swing2Limit(out SoftJointLimit value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_get_swingAxis(out Vector3 value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_get_targetAngularVelocity(out Vector3 value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_get_targetRotation(out Quaternion value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_set_highTwistLimit(ref SoftJointLimit value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_set_lowTwistLimit(ref SoftJointLimit value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_set_rotationDrive(ref JointDrive value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_set_swing1Limit(ref SoftJointLimit value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_set_swing2Limit(ref SoftJointLimit value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_set_swingAxis(ref Vector3 value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_set_targetAngularVelocity(ref Vector3 value);
        [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall]
        private extern void INTERNAL_set_targetRotation(ref Quaternion value);

        public SoftJointLimit highTwistLimit
        {
            get
            {
                SoftJointLimit limit;
                this.INTERNAL_get_highTwistLimit(out limit);
                return limit;
            }
            set
            {
                this.INTERNAL_set_highTwistLimit(ref value);
            }
        }

        public SoftJointLimit lowTwistLimit
        {
            get
            {
                SoftJointLimit limit;
                this.INTERNAL_get_lowTwistLimit(out limit);
                return limit;
            }
            set
            {
                this.INTERNAL_set_lowTwistLimit(ref value);
            }
        }

        public JointDrive rotationDrive
        {
            get
            {
                JointDrive drive;
                this.INTERNAL_get_rotationDrive(out drive);
                return drive;
            }
            set
            {
                this.INTERNAL_set_rotationDrive(ref value);
            }
        }

        public SoftJointLimit swing1Limit
        {
            get
            {
                SoftJointLimit limit;
                this.INTERNAL_get_swing1Limit(out limit);
                return limit;
            }
            set
            {
                this.INTERNAL_set_swing1Limit(ref value);
            }
        }

        public SoftJointLimit swing2Limit
        {
            get
            {
                SoftJointLimit limit;
                this.INTERNAL_get_swing2Limit(out limit);
                return limit;
            }
            set
            {
                this.INTERNAL_set_swing2Limit(ref value);
            }
        }

        public Vector3 swingAxis
        {
            get
            {
                Vector3 vector;
                this.INTERNAL_get_swingAxis(out vector);
                return vector;
            }
            set
            {
                this.INTERNAL_set_swingAxis(ref value);
            }
        }

        public Vector3 targetAngularVelocity
        {
            get
            {
                Vector3 vector;
                this.INTERNAL_get_targetAngularVelocity(out vector);
                return vector;
            }
            set
            {
                this.INTERNAL_set_targetAngularVelocity(ref value);
            }
        }

        public Quaternion targetRotation
        {
            get
            {
                Quaternion quaternion;
                this.INTERNAL_get_targetRotation(out quaternion);
                return quaternion;
            }
            set
            {
                this.INTERNAL_set_targetRotation(ref value);
            }
        }
    }
}

